package integration

import (
	"context"

	"gitee.com/wangshh_123/cross-pay-go/src/platform/common"
)

// PlatformHandler 定义所有支付平台统一的处理器接口，只保留卡片列表和卡Bin列表功能
type PlatformHandler interface {
	// 卡片相关
	HandleCardList(ctx context.Context, req *common.CardListRequest) (*common.CardListResponse, error) // 查询卡片列表

	// 卡Bin相关
	HandleCardBinList(ctx context.Context, req *common.CardBinListRequest) (*common.CardBinListResponse, error) // 查询卡Bin列表

	// CVV相关
	HandleCardCVV(ctx context.Context, req *common.CardCVVRequest) (*common.CardCVVResponse, error) // 查询卡片CVV

	// 卡详情相关
	HandleCardDetail(ctx context.Context, req *common.CardDetailRequest) (*common.CardDetailResponse, error) // 查询卡片详情

	// 持卡人相关
	HandleCardholderList(ctx context.Context, req *common.CardholderListRequest) (*common.CardholderListResponse, error)       // 查询持卡人列表
	HandleCreateCardholder(ctx context.Context, req *common.CreateCardholderRequest) (*common.CreateCardholderResponse, error) // 创建持卡人
	HandleUpdateCardholder(ctx context.Context, req *common.UpdateCardholderRequest) (*common.UpdateCardholderResponse, error) // 更新持卡人

	// 卡历史相关
	HandleCardHistoryList(ctx context.Context, req *common.CardHistoryListRequest) (*common.CardHistoryListResponse, error) // 查询卡历史列表

	// 卡片操作相关
	HandleOpenCard(ctx context.Context, req *common.OpenCardRequest) (*common.OpenCardResponse, error)             // 开卡
	HandleRechargeCard(ctx context.Context, req *common.RechargeCardRequest) (*common.RechargeCardResponse, error) // 卡片充值
	HandleWithdrawCard(ctx context.Context, req *common.WithdrawCardRequest) (*common.WithdrawCardResponse, error) // 卡片提现
	HandleFreezeCard(ctx context.Context, req *common.FreezeCardRequest) (*common.FreezeCardResponse, error)       // 卡片冻结
	HandleEnableCard(ctx context.Context, req *common.EnableCardRequest) (*common.EnableCardResponse, error)       // 卡片解冻
	HandleCancelCard(ctx context.Context, req *common.CancelCardRequest) (*common.CancelCardResponse, error)       // 卡片注销
	HandleBatchOpenCard(ctx context.Context, req *common.BatchOpenCardRequest) (*common.BatchOpenCardResponse, error)
	HandleTransactionList(ctx context.Context, req *common.TransactionListRequest) (*common.TransactionListResponse, error)
	HandleTransactionDetail(ctx context.Context, req *common.TransactionDetailRequest) (*common.TransactionDetailResponse, error)

	// 获取平台信息
	GetPlatformID() string                     // 获取平台ID
	GetPlatformConfig() *common.PlatformConfig // 获取平台配置
}

// BaseAdapter 基础适配器，封装平台ID和配置，供具体平台适配器继承
// 提供平台标识和配置信息的统一管理
type BaseAdapter struct {
	platformID string                 // 平台ID，用于标识不同的支付平台
	config     *common.PlatformConfig // 平台配置信息，包含API地址、密钥等
}

// NewBaseAdapter 创建基础适配器实例
// 参数：
//   - platformID: 平台唯一标识符
//   - config: 平台配置信息
//
// 返回：基础适配器实例
func NewBaseAdapter(platformID string, config *common.PlatformConfig) *BaseAdapter {
	return &BaseAdapter{
		platformID: platformID,
		config:     config,
	}
}

// GetPlatformID 获取平台ID
// 返回：平台唯一标识符
func (a *BaseAdapter) GetPlatformID() string {
	return a.platformID
}

// GetPlatformConfig 获取平台配置
// 返回：平台配置信息
func (a *BaseAdapter) GetPlatformConfig() *common.PlatformConfig {
	return a.config
}

// RequestContext 统一请求上下文，便于调试和链路追踪
// 记录请求的完整信息，包括平台ID、请求ID、时间戳等
type RequestContext struct {
	PlatformID  string      // 平台ID，标识请求来源平台
	RequestID   string      // 请求唯一ID，用于链路追踪
	Timestamp   int64       // 时间戳，记录请求发起时间
	RawRequest  interface{} // 原始请求数据，便于调试
	RawResponse interface{} // 原始响应数据，便于调试
	Error       error       // 错误信息，记录处理过程中的错误
}

// PlatformError 平台错误类型，统一错误结构
// 提供标准化的错误信息格式，便于错误处理和日志记录
type PlatformError struct {
	PlatformID string `json:"platform_id"`       // 平台ID，标识错误来源平台
	Code       string `json:"code"`              // 错误码，用于错误分类和处理
	Message    string `json:"message"`           // 错误信息，用户友好的错误描述
	Details    string `json:"details,omitempty"` // 详细信息，包含技术细节，可选字段
}

// Error 实现error接口
// 返回格式化的错误信息字符串
func (e *PlatformError) Error() string {
	return e.Message
}

// NewPlatformError 创建平台错误
// 参数：
//   - platformID: 平台ID
//   - code: 错误码
//   - message: 错误信息
//   - details: 详细信息
//
// 返回：平台错误实例
func NewPlatformError(platformID, code, message, details string) *PlatformError {
	return &PlatformError{
		PlatformID: platformID,
		Code:       code,
		Message:    message,
		Details:    details,
	}
}

// ResponseConverter 响应转换器接口
type ResponseConverter interface {
	// 卡片相关
	ConvertCardListResponse(rawResp interface{}) (*common.CardListResponse, error)       // 卡片列表响应转换
	ConvertCardBinListResponse(rawResp interface{}) (*common.CardBinListResponse, error) // 卡BIN列表响应转换
	ConvertCardCVVResponse(rawResp interface{}) (*common.CardCVVResponse, error)         // 卡片CVV响应转换
	ConvertCardDetailResponse(rawResp interface{}) (*common.CardDetailResponse, error)   // 卡片详情响应转换

	// 持卡人相关
	ConvertCardholderListResponse(rawResp interface{}) (*common.CardholderListResponse, error)     // 持卡人列表响应转换
	ConvertCreateCardholderResponse(rawResp interface{}) (*common.CreateCardholderResponse, error) // 创建持卡人响应转换
	ConvertUpdateCardholderResponse(rawResp interface{}) (*common.UpdateCardholderResponse, error) // 更新持卡人响应转换

	// 卡历史相关
	ConvertCardHistoryListResponse(rawResp interface{}) (*common.CardHistoryListResponse, error) // 卡历史列表响应转换

	// 卡片操作相关
	ConvertOpenCardResponse(rawResp interface{}) (*common.OpenCardResponse, error)                   // 开卡响应转换
	ConvertRechargeCardResponse(rawResp interface{}) (*common.RechargeCardResponse, error)           // 卡片充值响应转换
	ConvertWithdrawCardResponse(rawResp interface{}) (*common.WithdrawCardResponse, error)           // 卡片提现响应转换
	ConvertFreezeCardResponse(rawResp interface{}) (*common.FreezeCardResponse, error)               // 卡片冻结响应转换
	ConvertEnableCardResponse(rawResp interface{}) (*common.EnableCardResponse, error)               // 卡片解冻响应转换
	ConvertCancelCardResponse(rawResp interface{}) (*common.CancelCardResponse, error)               // 卡片注销响应转换
	ConvertBatchOpenCardResponse(rawResp interface{}) (*common.BatchOpenCardResponse, error)         // 批量开卡响应转换
	ConvertTransactionListResponse(rawResp interface{}) (*common.TransactionListResponse, error)     // 交易列表响应转换
	ConvertTransactionDetailResponse(rawResp interface{}) (*common.TransactionDetailResponse, error) // 交易详情响应转换
}

// RequestConverter 请求转换器接口，统一请求转为平台格式
// 负责将统一的业务请求转换为各平台特有的请求格式
type RequestConverter interface {
	// 卡片相关转换
	ConvertCardListRequest(req *common.CardListRequest) (interface{}, error)       // 卡片列表请求转换
	ConvertCardBinListRequest(req *common.CardBinListRequest) (interface{}, error) // 卡BIN列表请求转换
	ConvertCardCVVRequest(req *common.CardCVVRequest) (interface{}, error)         // 卡片CVV请求转换
	ConvertCardDetailRequest(req *common.CardDetailRequest) (interface{}, error)   // 卡片详情请求转换

	// 持卡人相关转换
	ConvertCardholderListRequest(req *common.CardholderListRequest) (interface{}, error)     // 持卡人列表请求转换
	ConvertCreateCardholderRequest(req *common.CreateCardholderRequest) (interface{}, error) // 创建持卡人请求转换
	ConvertUpdateCardholderRequest(req *common.UpdateCardholderRequest) (interface{}, error) // 更新持卡人请求转换

	// 卡历史相关
	ConvertCardHistoryListRequest(req *common.CardHistoryListRequest) (interface{}, error) // 卡历史列表请求转换

	// 卡片操作相关
	ConvertOpenCardRequest(req *common.OpenCardRequest) (interface{}, error)                   // 开卡请求转换
	ConvertRechargeCardRequest(req *common.RechargeCardRequest) (interface{}, error)           // 卡片充值请求转换
	ConvertWithdrawCardRequest(req *common.WithdrawCardRequest) (interface{}, error)           // 卡片提现请求转换
	ConvertFreezeCardRequest(req *common.FreezeCardRequest) (interface{}, error)               // 卡片冻结请求转换
	ConvertEnableCardRequest(req *common.EnableCardRequest) (interface{}, error)               // 卡片解冻请求转换
	ConvertCancelCardRequest(req *common.CancelCardRequest) (interface{}, error)               // 卡片注销请求转换
	ConvertBatchOpenCardRequest(req *common.BatchOpenCardRequest) (interface{}, error)         // 批量开卡请求转换
	ConvertTransactionListRequest(req *common.TransactionListRequest) (interface{}, error)     // 交易列表请求转换
	ConvertTransactionDetailRequest(req *common.TransactionDetailRequest) (interface{}, error) // 交易详情请求转换
}

// PlatformClient 平台客户端接口
type PlatformClient interface {
	// 卡片相关
	GetCardList(ctx context.Context, req interface{}) (interface{}, error)    // 查询卡片列表API调用
	GetCardBinList(ctx context.Context, req interface{}) (interface{}, error) // 查询卡BIN列表API调用
	GetCardCVV(ctx context.Context, req interface{}) (interface{}, error)     // 查询卡片CVV API调用
	GetCardDetail(ctx context.Context, req interface{}) (interface{}, error)  // 查询卡片详情API调用

	// 持卡人相关
	GetCardholderList(ctx context.Context, req interface{}) (interface{}, error) // 查询持卡人列表API调用
	CreateCardholder(ctx context.Context, req interface{}) (interface{}, error)  // 创建持卡人API调用
	UpdateCardholder(ctx context.Context, req interface{}) (interface{}, error)  // 更新持卡人API调用

	// 卡历史相关
	GetCardHistoryList(ctx context.Context, req interface{}) (interface{}, error) // 查询卡历史列表API调用

	// 卡片操作相关
	OpenCard(ctx context.Context, req interface{}) (interface{}, error)             // 开卡API调用
	RechargeCard(ctx context.Context, req interface{}) (interface{}, error)         // 卡片充值API调用
	WithdrawCard(ctx context.Context, req interface{}) (interface{}, error)         // 卡片提现API调用
	FreezeCard(ctx context.Context, req interface{}) (interface{}, error)           // 卡片冻结API调用
	EnableCard(ctx context.Context, req interface{}) (interface{}, error)           // 卡片解冻API调用
	CancelCard(ctx context.Context, req interface{}) (interface{}, error)           // 卡片注销API调用
	BatchOpenCard(ctx context.Context, req interface{}) (interface{}, error)        // 批量开卡API调用
	GetTransactionList(ctx context.Context, req interface{}) (interface{}, error)   // 获取交易列表API调用
	GetTransactionDetail(ctx context.Context, req interface{}) (interface{}, error) // 获取交易详情API调用
}

// AdapterHandler 适配器处理器，实现PlatformHandler接口，组合BaseAdapter、client、req/resp转换器
// 通过组合实现平台的统一处理逻辑，采用模板方法模式
type AdapterHandler struct {
	*BaseAdapter
	client   PlatformClient    // 平台API客户端，负责与平台API交互
	reqConv  RequestConverter  // 请求转换器，统一请求转平台格式
	respConv ResponseConverter // 响应转换器，平台响应转统一格式
}

// NewAdapterHandler 创建适配器处理器
// 参数：
//   - platformID: 平台ID
//   - config: 平台配置
//   - client: 平台客户端
//   - reqConv: 请求转换器
//   - respConv: 响应转换器
//
// 返回：适配器处理器实例
func NewAdapterHandler(platformID string, config *common.PlatformConfig, client PlatformClient, reqConv RequestConverter, respConv ResponseConverter) *AdapterHandler {
	return &AdapterHandler{
		BaseAdapter: NewBaseAdapter(platformID, config),
		client:      client,
		reqConv:     reqConv,
		respConv:    respConv,
	}
}

// 以下为PlatformHandler接口的实现，只保留卡片列表和卡Bin列表的处理逻辑
// 采用模板方法模式：1. 请求转换 2. 调用平台API 3. 响应转换

// HandleCardList 处理卡片列表查询
// 查询指定条件下的卡片列表信息
func (h *AdapterHandler) HandleCardList(ctx context.Context, req *common.CardListRequest) (*common.CardListResponse, error) {
	// 1. 转换请求：将统一格式转换为平台特有格式
	platformReq, err := h.reqConv.ConvertCardListRequest(req)
	if err != nil {
		return nil, NewPlatformError(h.platformID, "REQUEST_CONVERT_ERROR", "请求转换失败", err.Error())
	}

	// 2. 调用平台API：使用平台客户端发送请求
	platformResp, err := h.client.GetCardList(ctx, platformReq)
	if err != nil {
		return nil, NewPlatformError(h.platformID, "API_CALL_ERROR", "API调用失败", err.Error())
	}

	// 3. 转换响应：将平台响应转换为统一格式
	return h.respConv.ConvertCardListResponse(platformResp)
}

// HandleCardBinList 处理卡Bin列表查询
// 查询银行卡BIN信息列表
func (h *AdapterHandler) HandleCardBinList(ctx context.Context, req *common.CardBinListRequest) (*common.CardBinListResponse, error) {
	// 1. 转换请求
	platformReq, err := h.reqConv.ConvertCardBinListRequest(req)
	if err != nil {
		return nil, NewPlatformError(h.platformID, "REQUEST_CONVERT_ERROR", "请求转换失败", err.Error())
	}

	// 2. 调用平台API
	platformResp, err := h.client.GetCardBinList(ctx, platformReq)
	if err != nil {
		return nil, NewPlatformError(h.platformID, "API_CALL_ERROR", "API调用失败", err.Error())
	}

	// 3. 转换响应
	return h.respConv.ConvertCardBinListResponse(platformResp)
}

// HandleCardCVV 处理卡片CVV查询
// 查询指定卡片的CVV信息
func (h *AdapterHandler) HandleCardCVV(ctx context.Context, req *common.CardCVVRequest) (*common.CardCVVResponse, error) {
	// 1. 转换请求
	platformReq, err := h.reqConv.ConvertCardCVVRequest(req)
	if err != nil {
		return nil, NewPlatformError(h.platformID, "REQUEST_CONVERT_ERROR", "请求转换失败", err.Error())
	}

	// 2. 调用平台API
	platformResp, err := h.client.GetCardCVV(ctx, platformReq)
	if err != nil {
		return nil, NewPlatformError(h.platformID, "API_CALL_ERROR", "API调用失败", err.Error())
	}

	// 3. 转换响应
	return h.respConv.ConvertCardCVVResponse(platformResp)
}

// HandleCardDetail 处理卡片详情查询
// 查询指定卡片的详细信息
func (h *AdapterHandler) HandleCardDetail(ctx context.Context, req *common.CardDetailRequest) (*common.CardDetailResponse, error) {
	// 1. 转换请求：将统一格式转换为平台特有格式
	platformReq, err := h.reqConv.ConvertCardDetailRequest(req)
	if err != nil {
		return nil, NewPlatformError(h.platformID, "REQUEST_CONVERT_ERROR", "请求转换失败", err.Error())
	}

	// 2. 调用平台API：使用平台客户端发送请求
	platformResp, err := h.client.GetCardDetail(ctx, platformReq)
	if err != nil {
		return nil, NewPlatformError(h.platformID, "API_CALL_ERROR", "API调用失败", err.Error())
	}

	// 3. 转换响应：将平台响应转换为统一格式
	return h.respConv.ConvertCardDetailResponse(platformResp)
}

// HandleCardholderList 处理持卡人列表查询
// 查询指定条件下的持卡人列表信息
func (h *AdapterHandler) HandleCardholderList(ctx context.Context, req *common.CardholderListRequest) (*common.CardholderListResponse, error) {
	// 1. 转换请求：将统一格式转换为平台特有格式
	platformReq, err := h.reqConv.ConvertCardholderListRequest(req)
	if err != nil {
		return nil, NewPlatformError(h.platformID, "REQUEST_CONVERT_ERROR", "请求转换失败", err.Error())
	}

	// 2. 调用平台API：使用平台客户端发送请求
	platformResp, err := h.client.GetCardholderList(ctx, platformReq)
	if err != nil {
		return nil, NewPlatformError(h.platformID, "API_CALL_ERROR", "API调用失败", err.Error())
	}

	// 3. 转换响应：将平台响应转换为统一格式
	return h.respConv.ConvertCardholderListResponse(platformResp)
}

// HandleCreateCardholder 处理创建持卡人
// 创建新的持卡人记录
func (h *AdapterHandler) HandleCreateCardholder(ctx context.Context, req *common.CreateCardholderRequest) (*common.CreateCardholderResponse, error) {
	// 1. 转换请求：将统一格式转换为平台特有格式
	platformReq, err := h.reqConv.ConvertCreateCardholderRequest(req)
	if err != nil {
		return nil, NewPlatformError(h.platformID, "REQUEST_CONVERT_ERROR", "请求转换失败", err.Error())
	}

	// 2. 调用平台API：使用平台客户端发送请求
	platformResp, err := h.client.CreateCardholder(ctx, platformReq)
	if err != nil {
		return nil, NewPlatformError(h.platformID, "API_CALL_ERROR", "API调用失败", err.Error())
	}

	// 3. 转换响应：将平台响应转换为统一格式
	return h.respConv.ConvertCreateCardholderResponse(platformResp)
}

// HandleUpdateCardholder 处理更新持卡人
// 更新指定持卡人的信息
func (h *AdapterHandler) HandleUpdateCardholder(ctx context.Context, req *common.UpdateCardholderRequest) (*common.UpdateCardholderResponse, error) {
	// 1. 转换请求：将统一格式转换为平台特有格式
	platformReq, err := h.reqConv.ConvertUpdateCardholderRequest(req)
	if err != nil {
		return nil, NewPlatformError(h.platformID, "REQUEST_CONVERT_ERROR", "请求转换失败", err.Error())
	}

	// 2. 调用平台API：使用平台客户端发送请求
	platformResp, err := h.client.UpdateCardholder(ctx, platformReq)
	if err != nil {
		return nil, NewPlatformError(h.platformID, "API_CALL_ERROR", "API调用失败", err.Error())
	}

	// 3. 转换响应：将平台响应转换为统一格式
	return h.respConv.ConvertUpdateCardholderResponse(platformResp)
}

// HandleCardHistoryList 处理卡历史列表查询
// 查询指定条件下的卡历史列表信息
func (h *AdapterHandler) HandleCardHistoryList(ctx context.Context, req *common.CardHistoryListRequest) (*common.CardHistoryListResponse, error) {
	// 1. 转换请求：将统一格式转换为平台特有格式
	platformReq, err := h.reqConv.ConvertCardHistoryListRequest(req)
	if err != nil {
		return nil, NewPlatformError(h.platformID, "REQUEST_CONVERT_ERROR", "请求转换失败", err.Error())
	}

	// 2. 调用平台API：使用平台客户端执行API调用
	platformResp, err := h.client.GetCardHistoryList(ctx, platformReq)
	if err != nil {
		return nil, NewPlatformError(h.platformID, "API_CALL_ERROR", "API调用失败", err.Error())
	}

	// 3. 转换响应：将平台特有格式转换为统一格式
	response, err := h.respConv.ConvertCardHistoryListResponse(platformResp)
	if err != nil {
		return nil, NewPlatformError(h.platformID, "RESPONSE_CONVERT_ERROR", "响应转换失败", err.Error())
	}

	return response, nil
}

// HandleOpenCard 处理开卡请求
// 创建新的虚拟卡片
func (h *AdapterHandler) HandleOpenCard(ctx context.Context, req *common.OpenCardRequest) (*common.OpenCardResponse, error) {
	// 1. 转换请求：将统一格式转换为平台特有格式
	platformReq, err := h.reqConv.ConvertOpenCardRequest(req)
	if err != nil {
		return nil, NewPlatformError(h.platformID, "REQUEST_CONVERT_ERROR", "请求转换失败", err.Error())
	}

	// 2. 调用平台API：使用平台客户端执行API调用
	platformResp, err := h.client.OpenCard(ctx, platformReq)
	if err != nil {
		return nil, NewPlatformError(h.platformID, "API_CALL_ERROR", "API调用失败", err.Error())
	}

	// 3. 转换响应：将平台特有格式转换为统一格式
	response, err := h.respConv.ConvertOpenCardResponse(platformResp)
	if err != nil {
		return nil, NewPlatformError(h.platformID, "RESPONSE_CONVERT_ERROR", "响应转换失败", err.Error())
	}

	return response, nil
}

// HandleRechargeCard 处理卡片充值请求
// 为指定卡片充值
func (h *AdapterHandler) HandleRechargeCard(ctx context.Context, req *common.RechargeCardRequest) (*common.RechargeCardResponse, error) {
	// 1. 转换请求：将统一格式转换为平台特有格式
	platformReq, err := h.reqConv.ConvertRechargeCardRequest(req)
	if err != nil {
		return nil, NewPlatformError(h.platformID, "REQUEST_CONVERT_ERROR", "请求转换失败", err.Error())
	}

	// 2. 调用平台API：使用平台客户端执行API调用
	platformResp, err := h.client.RechargeCard(ctx, platformReq)
	if err != nil {
		return nil, NewPlatformError(h.platformID, "API_CALL_ERROR", "API调用失败", err.Error())
	}

	// 3. 转换响应：将平台特有格式转换为统一格式
	response, err := h.respConv.ConvertRechargeCardResponse(platformResp)
	if err != nil {
		return nil, NewPlatformError(h.platformID, "RESPONSE_CONVERT_ERROR", "响应转换失败", err.Error())
	}

	return response, nil
}

// HandleWithdrawCard 处理卡片提现请求
// 从指定卡片提现资金
func (h *AdapterHandler) HandleWithdrawCard(ctx context.Context, req *common.WithdrawCardRequest) (*common.WithdrawCardResponse, error) {
	// 1. 转换请求：将统一格式转换为平台特有格式
	platformReq, err := h.reqConv.ConvertWithdrawCardRequest(req)
	if err != nil {
		return nil, NewPlatformError(h.platformID, "REQUEST_CONVERT_ERROR", "请求转换失败", err.Error())
	}

	// 2. 调用平台API：使用平台客户端执行API调用
	platformResp, err := h.client.WithdrawCard(ctx, platformReq)
	if err != nil {
		return nil, NewPlatformError(h.platformID, "API_CALL_ERROR", "API调用失败", err.Error())
	}

	// 3. 转换响应：将平台特有格式转换为统一格式
	response, err := h.respConv.ConvertWithdrawCardResponse(platformResp)
	if err != nil {
		return nil, NewPlatformError(h.platformID, "RESPONSE_CONVERT_ERROR", "响应转换失败", err.Error())
	}

	return response, nil
}

// HandleFreezeCard 处理卡片冻结请求
// 冻结指定卡片
func (h *AdapterHandler) HandleFreezeCard(ctx context.Context, req *common.FreezeCardRequest) (*common.FreezeCardResponse, error) {
	// 1. 转换请求：将统一格式转换为平台特有格式
	platformReq, err := h.reqConv.ConvertFreezeCardRequest(req)
	if err != nil {
		return nil, NewPlatformError(h.platformID, "REQUEST_CONVERT_ERROR", "请求转换失败", err.Error())
	}

	// 2. 调用平台API：使用平台客户端执行API调用
	platformResp, err := h.client.FreezeCard(ctx, platformReq)
	if err != nil {
		return nil, NewPlatformError(h.platformID, "API_CALL_ERROR", "API调用失败", err.Error())
	}

	// 3. 转换响应：将平台特有格式转换为统一格式
	response, err := h.respConv.ConvertFreezeCardResponse(platformResp)
	if err != nil {
		return nil, NewPlatformError(h.platformID, "RESPONSE_CONVERT_ERROR", "响应转换失败", err.Error())
	}

	return response, nil
}

// HandleEnableCard 处理卡片解冻请求
// 解冻指定卡片
func (h *AdapterHandler) HandleEnableCard(ctx context.Context, req *common.EnableCardRequest) (*common.EnableCardResponse, error) {
	// 1. 转换请求：将统一格式转换为平台特有格式
	platformReq, err := h.reqConv.ConvertEnableCardRequest(req)
	if err != nil {
		return nil, NewPlatformError(h.platformID, "REQUEST_CONVERT_ERROR", "请求转换失败", err.Error())
	}

	// 2. 调用平台API：使用平台客户端执行API调用
	platformResp, err := h.client.EnableCard(ctx, platformReq)
	if err != nil {
		return nil, NewPlatformError(h.platformID, "API_CALL_ERROR", "API调用失败", err.Error())
	}

	// 3. 转换响应：将平台特有格式转换为统一格式
	response, err := h.respConv.ConvertEnableCardResponse(platformResp)
	if err != nil {
		return nil, NewPlatformError(h.platformID, "RESPONSE_CONVERT_ERROR", "响应转换失败", err.Error())
	}

	return response, nil
}

// HandleCancelCard 处理卡片注销请求
// 注销指定卡片
func (h *AdapterHandler) HandleCancelCard(ctx context.Context, req *common.CancelCardRequest) (*common.CancelCardResponse, error) {
	// 1. 转换请求：将统一格式转换为平台特有格式
	platformReq, err := h.reqConv.ConvertCancelCardRequest(req)
	if err != nil {
		return nil, NewPlatformError(h.platformID, "REQUEST_CONVERT_ERROR", "请求转换失败", err.Error())
	}

	// 2. 调用平台API：使用平台客户端执行API调用
	platformResp, err := h.client.CancelCard(ctx, platformReq)
	if err != nil {
		return nil, NewPlatformError(h.platformID, "API_CALL_ERROR", "API调用失败", err.Error())
	}

	// 3. 转换响应：将平台特有格式转换为统一格式
	response, err := h.respConv.ConvertCancelCardResponse(platformResp)
	if err != nil {
		return nil, NewPlatformError(h.platformID, "RESPONSE_CONVERT_ERROR", "响应转换失败", err.Error())
	}

	return response, nil
}

// HandleBatchOpenCard 处理批量开卡请求
// 批量创建虚拟卡片
func (h *AdapterHandler) HandleBatchOpenCard(ctx context.Context, req *common.BatchOpenCardRequest) (*common.BatchOpenCardResponse, error) {
	// 1. 转换请求：将统一格式转换为平台特有格式
	platformReq, err := h.reqConv.ConvertBatchOpenCardRequest(req)
	if err != nil {
		return nil, NewPlatformError(h.platformID, "REQUEST_CONVERT_ERROR", "请求转换失败", err.Error())
	}

	// 2. 调用平台API：使用平台客户端执行API调用
	platformResp, err := h.client.BatchOpenCard(ctx, platformReq)
	if err != nil {
		return nil, NewPlatformError(h.platformID, "API_CALL_ERROR", "API调用失败", err.Error())
	}

	// 3. 转换响应：将平台特有格式转换为统一格式
	response, err := h.respConv.ConvertBatchOpenCardResponse(platformResp)
	if err != nil {
		return nil, NewPlatformError(h.platformID, "RESPONSE_CONVERT_ERROR", "响应转换失败", err.Error())
	}

	return response, nil
}

// HandleTransactionList 处理交易列表查询
// 查询指定条件下的交易列表信息
func (h *AdapterHandler) HandleTransactionList(ctx context.Context, req *common.TransactionListRequest) (*common.TransactionListResponse, error) {
	// 1. 转换请求：将统一格式转换为平台特有格式
	platformReq, err := h.reqConv.ConvertTransactionListRequest(req)
	if err != nil {
		return nil, NewPlatformError(h.platformID, "REQUEST_CONVERT_ERROR", "请求转换失败", err.Error())
	}

	// 2. 调用平台API：使用平台客户端执行API调用
	platformResp, err := h.client.GetTransactionList(ctx, platformReq)
	if err != nil {
		return nil, NewPlatformError(h.platformID, "API_CALL_ERROR", "API调用失败", err.Error())
	}

	// 3. 转换响应：将平台特有格式转换为统一格式
	response, err := h.respConv.ConvertTransactionListResponse(platformResp)
	if err != nil {
		return nil, NewPlatformError(h.platformID, "RESPONSE_CONVERT_ERROR", "响应转换失败", err.Error())
	}

	return response, nil
}
